

#include "mensaje.h"
#include <string>
#include <vector>
#include <sstream>

using std::string;
using std::stringstream;
using std::vector;


Mensaje::Mensaje(){
}

string Mensaje::getMensajeBienvenida(int puerto) {
	stringstream spuerto;
	spuerto << puerto;
	string mensaje = "PUERTO " + spuerto.str() + " " + "Aceptado. ";
	mensaje += "Recibiendo datos...";
	return mensaje;
}

string Mensaje::convertirIntaStr(int entero) {
	stringstream sentero;
	sentero << entero;
	string mensaje = sentero.str();
	return mensaje;
}

string Mensaje::getMensajeDatosRecibidos(int lon) {
	stringstream sslon;
	sslon << lon;
	string mensaje = "Datos recibidos exitosamente. ";
	mensaje += "Cantidad de bytes recibidos: " + sslon.str() + ".";
	return mensaje;
}

uint32_t Mensaje::leerLongitudMensaje(const char* msg, int lon) {
	uint32_t nValue = (msg[0] << 24) + (msg[1] << 16) + (msg[2] << 8) + msg[3];
	return nValue;
}

string Mensaje::getLongMensaje(const std::string& mensaje) {
	uint32_t length = mensaje.size();
	string strLon;
	char byteArray[4];
	//creamos longitud big-endian

	byteArray[3] = (length & 0xff000000) >> 24;
	byteArray[2] = (length & 0x00ff0000) >> 16;
	byteArray[1] = (length & 0x0000ff00) >> 8;
	byteArray[0] = length & 0x000000ff;

	strLon += byteArray[3];
	strLon += byteArray[2];
	strLon += byteArray[1];
	strLon += byteArray[0];

	return strLon;
}


Json::Value Mensaje::setVecInt(vector<int> vec, string flag ){
	Json::Value book_json(Json::objectValue);
	Json::Value valor(Json::objectValue);
	Json::Value vec_json(Json::arrayValue);

	for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
	valor=(*it);
	vec_json.append(valor);
	}
	book_json["flag"] = flag;
	book_json["vector"] = vec_json;
	return book_json;
}

string Mensaje::getFlag(Json::Value book_json){
	return book_json["flag"].asString();
}

Json::Value Mensaje::convertJson(string strJson){
	Json::Value value(Json::objectValue);
	Json::Reader reader;
	reader.parse(strJson, value, false);
	return value;
}


vector<int> Mensaje::getVecInt(Json::Value book_json){
	vector<int> vec;
	for (Json::Value::iterator it = book_json["vector"].begin();
			it != book_json["vector"].end(); ++it) {
		vec.push_back((*it).asInt());
	}
	return vec;
}
